সি প্রোগ্রামিং ভাষায় স্ট্রিং হল চরিত্রগুলির একটি অ্যারে (array) যা একটি নির্দিষ্ট আকারে থাকে এবং শেষের দিকে একটি null character ('\0') দ্বারা চিহ্নিত হয়। সি স্ট্রিং মূলত একধরনের চরিত্র অ্যারে যা সি ভাষায় স্ট্রিং হ্যান্ডলিংয়ের জন্য ব্যবহৃত হয়। স্ট্রিংগুলো সাধারণত একাধিক চরিত্রের সংমিশ্রণ হয় এবং সেগুলো একটি নির্দিষ্ট অ্যারে হিসেবে মেমরিতে সংরক্ষিত থাকে।
সি স্ট্রিং তৈরি এবং পরিচালনা করার জন্য বেশ কিছু গুরুত্বপূর্ণ ফাংশন রয়েছে, যা সি প্রোগ্রামে স্ট্রিং অপারেশন যেমন স্ট্রিং কপি, স্ট্রিং আউটপুট, স্ট্রিং লেন্থ, স্ট্রিং কনক্যাটেনেশন ইত্যাদি সমাধান করতে সহায়তা করে।
সি স্ট্রিং তৈরি এবং ব্যবহার
সি স্ট্রিং সাধারণত char টাইপের অ্যারে হিসেবে ডিক্লেয়ার করা হয় এবং এর শেষের দিকে '\0' চিহ্ন থাকে, যা স্ট্রিংয়ের শেষে পৌঁছানোর সংকেত দেয়। স্ট্রিং অপারেশনগুলো বিভিন্ন স্ট্যান্ডার্ড লাইব্রেরি ফাংশন দিয়ে করা হয় যেমন strlen(), strcpy(), strcat(), ইত্যাদি।
সি স্ট্রিং তৈরি এবং প্রাথমিক ধারণা
#include <stdio.h>
int main() {
char str[] = "Hello, World!"; // String initialization
printf("String: %s\n", str); // Print the string
return 0;
}ব্যাখ্যা:
char str[] = "Hello, World!";: এটি একটি সি স্ট্রিং তৈরি করছে, যেখানে"Hello, World!"একটি স্ট্রিং লিটারাল। সি প্রোগ্রামে স্ট্রিং ডিফাইন করলে স্বয়ংক্রিয়ভাবে তার শেষে'\0'যুক্ত হয়ে যায়।%sফরম্যাট স্পেসিফায়ার স্ট্রিং প্রিন্ট করতে ব্যবহৃত হয়।
সি স্ট্রিংয়ের সাথে বিভিন্ন স্ট্যান্ডার্ড ফাংশন
সি প্রোগ্রামে স্ট্রিং সম্পর্কিত বিভিন্ন ফাংশন স্ট্যান্ডার্ড লাইব্রেরি <string.h> তে অন্তর্ভুক্ত রয়েছে। নিচে কিছু মৌলিক স্ট্রিং ফাংশন এবং তাদের ব্যবহার দেয়া হলো:
১. strlen() - স্ট্রিংয়ের দৈর্ঘ্য নির্ণয়
#include <stdio.h>
#include <string.h> // For strlen()
int main() {
char str[] = "Hello, World!";
int length = strlen(str); // Find the length of the string
printf("Length of the string: %d\n", length);
return 0;
}ব্যাখ্যা:
strlen(str): এটি স্ট্রিংstrএর দৈর্ঘ্য (অর্থাৎ, স্ট্রিংয়ের চরিত্র সংখ্যা) রিটার্ন করে,'\0'বাদে।
২. strcpy() - স্ট্রিং কপি করা
#include <stdio.h>
#include <string.h> // For strcpy()
int main() {
char str1[] = "Hello, World!";
char str2[50]; // Create an empty string for copying
strcpy(str2, str1); // Copy content of str1 into str2
printf("Copied string: %s\n", str2);
return 0;
}ব্যাখ্যা:
strcpy(str2, str1): এটিstr1এর সমস্ত কন্টেন্টstr2এ কপি করে।
৩. strcat() - স্ট্রিং সংযুক্ত করা (Concatenation)
#include <stdio.h>
#include <string.h> // For strcat()
int main() {
char str1[50] = "Hello, ";
char str2[] = "World!";
strcat(str1, str2); // Concatenate str2 at the end of str1
printf("Concatenated string: %s\n", str1);
return 0;
}ব্যাখ্যা:
strcat(str1, str2): এটিstr2এর কন্টেন্টstr1এর শেষে যোগ করে (concatenate)।
৪. strcmp() - স্ট্রিং তুলনা (Comparison)
#include <stdio.h>
#include <string.h> // For strcmp()
int main() {
char str1[] = "Hello";
char str2[] = "Hello";
int result = strcmp(str1, str2); // Compare str1 and str2
if (result == 0) {
printf("Both strings are equal.\n");
} else if (result < 0) {
printf("str1 is less than str2.\n");
} else {
printf("str1 is greater than str2.\n");
}
return 0;
}ব্যাখ্যা:
strcmp(str1, str2): এটি দুটি স্ট্রিংকে তুলনা করে। যদি স্ট্রিংগুলো সমান হয় তবে0রিটার্ন করে, অন্যথায় একটি ঋণাত্মক বা ধনাত্মক মান রিটার্ন করে স্ট্রিংগুলোর তুলনা অনুসারে।
৫. strchr() - স্ট্রিংয়ের মধ্যে একটি চরিত্র খুঁজে বের করা
#include <stdio.h>
#include <string.h> // For strchr()
int main() {
char str[] = "Hello, World!";
char ch = 'W';
char *ptr = strchr(str, ch); // Find the first occurrence of 'W'
if (ptr != NULL) {
printf("Character found at position: %ld\n", ptr - str);
} else {
printf("Character not found\n");
}
return 0;
}ব্যাখ্যা:
strchr(str, ch): এটিstrস্ট্রিংয়ে প্রথমchচরিত্রটি খুঁজে বের করে এবং তার অবস্থান রিটার্ন করে। যদি চরিত্রটি না পাওয়া যায়, তবেNULLরিটার্ন করে।
৬. strtok() - স্ট্রিং বিভাজন (Tokenization)
#include <stdio.h>
#include <string.h> // For strtok()
int main() {
char str[] = "Hello World, Welcome to C programming!";
char *token = strtok(str, " ,");
while (token != NULL) {
printf("%s\n", token);
token = strtok(NULL, " ,");
}
return 0;
}ব্যাখ্যা:
strtok(str, " ,"): এটিstrস্ট্রিংকে বিভাজন করে এবং স্পেস এবং কমা (" , ") দ্বারা প্রতিটি অংশ আলাদা করে।- এটি প্রতিটি টোকেন রিটার্ন করে যতক্ষণ না কোনো অংশ অবশিষ্ট থাকে।
সি স্ট্রিং এর চ্যালেঞ্জ ও সীমাবদ্ধতা
- স্ট্রিং ম্যানিপুলেশন: সি স্ট্রিং দিয়ে স্ট্রিং ম্যানিপুলেশন (যেমন সংযুক্তি, কাটানো, বা রিভার্স করা) অনেক বেশি জটিল হতে পারে কারণ স্ট্রিংগুলি শুধুমাত্র চরিত্র অ্যারে এবং সেগুলোর মধ্যে আস্থা করার জন্য
'\0'(null character) থাকতে হয়। - মেমরি ম্যানেজমেন্ট: সি ভাষায় স্ট্রিংয়ের সাইজ পূর্বে নির্ধারণ করতে হয় এবং যদি স্ট্রিংটি বড় হয়ে যায়, তবে মেমরি পুনরায় অ্যালোকেট করার সমস্যা সৃষ্টি হতে পারে।
- সীমাবদ্ধ স্ট্রিং ফাংশন: সি স্ট্রিং ফাংশনগুলির জন্য উপযুক্ত পরামর্শ এবং সীমাবদ্ধতা (যেমন
strcpy()যখন সঠিক আকারে স্ট্রিং কপি না করে) থাকতে পারে, তাই মেমরি ওভারফ্লো এবং নিরাপত্তা সমস্যা হতে পারে।
সারসংক্ষেপ
সি স্ট্রিং হলো একটি অ্যারে যা char টাইপের উপাদান ধারণ করে এবং তার শেষে একটি '\0' (null character) দিয়ে স্ট্রিংটি শেষ হয়। সি প্রোগ্রামে স্ট্রিং ম্যানিপুলেশন করার জন্য বিভিন্ন স্ট্যান্ডার্ড লাইব্রেরি ফাংশন যেমন strlen(), strcpy(), strcat(), strcmp() ইত্যাদি ব্যবহৃত হয়। সি স্ট্রিংয়ে মেমরি ম্যানেজমেন্ট এবং স্ট্রিং অপারেশনগুলোকে সাবধানে পরিচালনা করতে হয় কারণ এতে অটো মেমরি ম্যানেজমেন্ট সিস্টেম নেই।
এই অধ্যায়ে আপনি সি প্রোগ্রামিং স্ট্রিং(string) এবং এর বিভিন্ন অপারেশন সম্মন্ধে জানবেন। এছাড়া আপনি স্ট্রিং ডিক্লেয়ার(declare) করা, ইনিশিয়ালাইজ(initialize) করা এবং বিভিন্ন ইনপুট/আউটপুট অপারেশনে এদের ব্যবহার সম্মন্ধেও জানবেন।
সি প্রোগ্রামিং স্ট্রিং
সি প্রোগ্রামিং এ ক্যারেক্টারে(character) এর array কে স্ট্রিং বলা হয়। null(/0) ক্যারেক্টারের মাধ্যমে স্ট্রিং এর সমাপ্তি ঘটে। উদাহরনস্বরুপঃ
"c string tutorial"
এখানে, "c string tutorial" হলো স্ট্রিং(string)। কম্পাইলার যখন স্ট্রিং কে কম্পাইল করে তখন স্ট্রিং এর শেষে একটি null(/0) ক্যারেক্টার যুক্ত করে দেয়।

সি স্ট্রিং ডিক্লেয়ারেশন
স্ট্রিং(string) নিয়ে কাজ করার পূর্বে প্রথমে তাদেরকে ডিক্লেয়ার(declared) করতে হবে।
array কে যে পদ্ধতিতে ডিক্লেয়ার(declared) করা হয় ঠিক একই পদ্ধতিতে স্ট্রিংও ডিক্লেয়ার করা হয়। শুধু পার্থক্য হলো স্ট্রিং char টাইপের।
array ব্যবহার করেঃ
char s[5];
pointer ব্যবহার করেঃ
pointer ব্যবহার করেও স্ট্রিং ডিক্লেয়ার করা যেতে পারেঃ
char *p;
সি স্ট্রিং ইনিশিয়ালাইজেশন
সি প্রোগ্রামিং এ বিভিন্ন পদ্ধতিতে স্ট্রিং ইনিশিয়ালাইজ(initialized) করা যেতে পারে।
সহজ ও সুবিধার জন্য ইনিশিয়ালাইজেশন(initialization) এবং ডিক্লেয়ারেশন(declaration) উভয় কাজ একই ধাপে করা হয়।
array ব্যবহার করেঃ
char c[] = "abcd";
অথবা,
char c[5] = "abcd";
অথবা,
char c[] = {'a', 'b', 'c', 'd', '\0'};
অথবা,
char c[5] = {'a', 'b', 'c', 'd', '\0'};
pointer ব্যবহার করেঃ
pointer ব্যবহার করেও স্ট্রিংকে নিম্নের ন্যায় ইনিশিয়ালাইজ(initialized) করা যেতে পারেঃ
char *c = "abcd";
ইউজার থেকে স্ট্রিং পাঠ করা
অন্য সকল ডাটা টাইপের মতই scanf() ফাংশন ব্যবহার করে আপনি স্ট্রিং পাঠ(read) করতে পারেন।
যাইহোক scanf() ফাংশন প্রবেশকৃত শব্দ-সমূহের শুধুমাত্র প্রথম শব্দকে গ্রহণ করে। হোয়াইট স্পেস(white space) বা শুধুমাত্র স্পেসের দেখা পাওয়া মাত্র এই ফাংশনের সমাপ্তি ঘটে।
ইউজার থেকে শব্দ পাঠ/গ্রহণ করা
char c[20];
scanf("%s", c);
উদাহরনঃ scanf() ফাংশন ব্যবহার করে স্ট্রিং পাঠ করা
kt_satt_skill_example_id=408
উপরের প্রোগ্রামে Rahman কে অবজ্ঞা করা হয়েছে কারণ scanf() ফাংশন স্পেসের পূর্ববর্তী একটি মাত্র শব্দকে গ্রহণ করে।
text এর একটি সারিকে পাঠ করা
টেক্সট এর একটি সম্পূর্ণ সারিকে পাঠ/গ্রহণ করার জন্য প্রত্যেক ক্যারেক্টারকে একটি একটি করে পাঠ করা হয়।
উদাহরনঃ getchar() ফাংশন ব্যবহার করে টেক্সট(text) এর একটি সারিকে পাঠ করা
//টার্মিনাল(terminal) থেকে কিভাবে একটি একটি করে ক্যারেক্টার পাঠ করতে হয় তা ভালভাবে বুঝার জন্য সি প্রোগ্রাম
#include <stdio.h>
int main()
{
char name[30], ch;
int i = 0;
printf("Enter name: ");
while(ch != '\n') //ইউজার enter বাটনে ক্লিক করলেই সমাপ্তি ঘটে
{
ch = getchar();
name[i] = ch;
i++;
}
name[i] = '\0'; // সবশেষে null ক্যারেক্টার যুক্ত করা
printf("Name: %s", name);
return 0;
}
উপরে প্রোগ্রামে getchar() ফাংশন ব্যবহার করে প্রতিবার ch ইউজার থেকে একটি করে অক্ষর গ্রহণ করে।
ইউজার enter বাটনে ক্লিক না করা পর্যন্ত এই প্রক্রিয়া চলতেই থাকে। পরিশেষে ইহাকে স্ট্রিং তৈরি করার জন্য শেষে একটি null character যুক্ত করা হয়।
স্ট্রিং গ্রহণের জন্য ইহা একটি বিরক্তিকর পদ্ধতি।
লাইব্রেরী ফাংশন ব্যবহার করে
সি প্রোগ্রামিং এ স্ট্রিং গ্রহণ এবং প্রদর্শনীর জন্য আরোও সহজ পদ্ধতিঃ পূর্বনির্ধারিত লাইব্রেরী ফাংশন যথাক্রমে gets() এবং puts ব্যবহার করতে পারেন।
উদাহরনঃ স্টান্ডার্ড লাইব্রেরী ফাংশন ব্যবহার করে এক সারি(line) টেক্সটকে পাঠ করা
kt_satt_skill_example_id=412
উপরের উভয় প্রোগ্রাম একই আউটপুট দেয়ঃ
ফাংশনের মধ্য দিয়ে স্ট্রিং অতিক্রম করানো
সি প্রোগ্রামিং এ স্ট্রিং char array এর মতই। সুতরাং এদেরকে array এর মত একই পদ্ধতিতে ফাংশনের মধ্য দিয়ে অতিক্রম(pass) করানো যেতে পারে।
আরোও জানতে ফাংশনের মধ্য দিয়ে array অতিক্রম অধ্যায় ভিজিট করুন।
#include <stdio.h>
void displayString(char str[]);
int main()
{
char str[50];
printf("Enter string: ");
gets(str);
displayString(str); // ফাংশনের মধ্য দিয়ে স্ট্রিং s কে অতিক্রম করানো হয়।
return 0;
}
void displayString(char str[]){
printf("String Output: ");
puts(str);
}
উপরের প্রোগ্রামে স্ট্রিং(string) s কে main() ফাংশন থেকে ইউজার ডিফাইন্ড(user-defined) ফাংশন displayString() এর মধ্য দিয়ে অতিক্রম(pass) করানো হয়েছে। ফাংশন ডিক্লেয়ারেশনে str[] হলো ফরম্যাল আর্গুমেন্ট(formal argument)।
সি স্ট্রিং পরিচালনার ফাংশন
সি প্রোগ্রামিং এ অনেক ধরণের স্ট্রিং অপারেশন রয়েছে যেগুলো আপনি ম্যানুয়ালি(manually) সম্পাদন করতে পারেন। যেমন- স্ট্রিং এর দৈর্ঘ্য(length) নির্ণয়, স্ট্রিং কপি(copy) করা, দুটি স্ট্রিং এর সংযোগ(concatenation) ইত্যাদি।
কিন্তু প্রোগ্রামারদেরকে সহজ করে দেওয়ার জন্য এধরনের অনেক লাইব্রেরী ফাংশন <string.h> হেডার ফাইলের অধীনে ইতোমধ্যেই ডিফাইন্ড(defined) করা আছে।
আরোও জানতে সি প্রোগ্রামিং স্ট্রিং পরিচালনা অধ্যায় ভিজিট করুন।
এই অধ্যায়ে আপনি লাইব্রেরী ফাংশন যেমন- gets(), puts(), strlen() ইত্যাদি ফাংশন ব্যবহার করে সি প্রোগ্রামিং এ স্ট্রিং পরিচালনা(manipulate) করা শিখবেন। এছাড়া আপনি ইউজার থেকে স্ট্রিং(string) গ্রহণ করে স্ট্রিং এর উপর বিভিন্ন অপারেশন চালাতে শিখবেন।
লাইব্রেরী ফাংশন- স্ট্রিং পরিচালনা
সমস্যার ধরন অনুযায়ী আপনাকে প্রায়ই স্ট্রিং ব্যবহার করতে হতে পারে। আপনি যদি ম্যানুয়ালি নিখুঁতভাবে স্ট্রিং পরিচালনা(manipulation) করতে চান তাহলে ইহা অনেক জটিল হতে পারে এং বেশীরভাগ সময়েই আপনাকে সমস্যায় পড়তে হতে পারে।
তাই আমরা আপনাকে এই সমস্যা থেকে উত্তরণের জন্য সি লাইব্রেরী ফাংশন ব্যবহারের জন্য সুপারিশ করছি।
স্টান্ডার্ড লাইব্রেরী ফাংশন:"string.h" এর অধীনে স্ট্রিং পরিচালনার জন্য অসংখ্য ফাংশন রয়েছে।
স্ট্রিং পরিচালনার জন্য সচরাচর ব্যবহৃত ফাংশন এবং তাদের কাজ নিম্নে তুলে ধরা হলোঃ
| ফাংশন | ফাংশনের কাজ |
|---|---|
| strlen() | স্ট্রিং(string) এর দৈর্ঘ্য নির্ণয় করে। |
| strcpy() | এক স্ট্রিং(string) কে অন্য স্ট্রিং এর মধ্যে কপি(Copy) করে। |
| strcat() | দুটি স্ট্রিং এর সংযোগ(Concatenation) ঘটায়। |
| strcmp() | দুটি স্ট্রিং এর মধ্যে তুলনা(compare) করে। |
| strlwr() | স্ট্রিংকে ছোট হাতের বর্ণে(lowercase) রূপান্তর করে। |
| strupr() | স্ট্রিংকে বড় হাতের বর্ণে(uppercase) রূপান্তর করে। |
| strrev() | স্ট্রিংকে বিপরীত(reverse) ক্রমে সাজায়। |
| strstr() | স্ট্রিং থেকে উপস্ট্রিং খুজে বের করে। |
স্ট্রিং(String) পরিচালনার(handling) ফাংশন-সমূহ "string.h" হেডার ফাইলের অধীনে ডিফাইন্ড(defined) করা আছে।
সুতরাং স্ট্রিং পরিচালনার ফাংশন-সমূহ আপনার প্রোগ্রামে রান(run) করানোর জন্য নিম্নোক্ত কোড যোগ করতে হবে।
#include <string.h>
gets() এবং puts()
সি প্রোগ্রমামিং এ স্ট্রিং গ্রহণ এবং প্রদর্শনীর জন্য যথাক্রমে লাইব্রেরী ফাংশন gets() এবং puts() ব্যবহার করা হয়।
#include<stdio.h>
int main()
{
char name[30];
printf("Enter name: ");
gets(name); //ইউজার থেকে স্ট্রিং গ্রহণের ফাংশন
printf("Name: ");
puts(name); //স্ট্রিং প্রদর্শনীর ফাংশন
return 0;
}
নোটঃ স্ট্রিং পরিচালনার জন্য gets() এবং puts() উভয় ফাংশন "stdio.h" হেডার ফাইলে ডিফাইন্ড করা আছে।
সি strlen() ফাংশন
strlen() ফাংশন একটি স্ট্রিং এর দৈর্ঘ রিটার্ন করে। ইহা null ক্যারেক্টার ('\0') গণনা করে না।
উদাহরণঃ নিচের উদাহরণে strlen() ফাংশনের মাধ্যমে ch[30] স্ট্রিং এর দৈর্ঘ্য নির্ণয় করে দেখানো হলোঃ
kt_satt_skill_example_id=434
সি strcpy()ফাংশন
strcpy(destination, source) ফাংশন source স্ট্রিং থেকে স্ট্রিংকে destination এ কপি করে।
উদাহরণঃ নিচের উদাহরণে strcpy() ফাংশনের মাধ্যমে ch1[30] স্ট্রিংকে ch2[30] স্ট্রিং এর মধ্যে কপি করে দেখানো হলোঃ
kt_satt_skill_example_id=437
সি strcat() ফাংশন
strcat(first_string, second_string) ফাংশন দুটি স্ট্রিংকে একসঙ্গে যোগ(concatination) করে প্রথম স্ট্রিং হিসাবে রিটার্ন করে।
kt_satt_skill_example_id=441
সি strcmp() ফাংশন
strcmp(first_string, second_string) ফাংশন দুটি স্ট্রিং এর মধ্যে তুলনা করে এবং উভয় স্ট্রিং সমান হলে 0(শূণ্য) রিটার্ন করে।
কনসোল থেকে স্ট্রিং পাঠ(read) করার জন্য এখানে আমরা gets() ফাংশন ব্যবহার করেছি।
kt_satt_skill_example_id=443
সি strlwr() ফাংশন
strlwr(string) ফাংশন একটি স্ট্রিংকে ছোট হাতের বর্ণে রুপান্তর করে।
kt_satt_skill_example_id=445
সি strupr() ফাংশন
strupr(string) ফাংশন একটি স্ট্রিংকে বড় হাতের বর্ণে রুপান্তর করে।
kt_satt_skill_example_id=447
সি strrev() ফাংশন
strrev(string) ফাংশন একটি স্ট্রিংকে উল্টিয়ে ফেলে। অর্থাৎ স্ট্রিং এর প্রথম ক্যারেক্টারগুলো শেষে এবং শেষ ক্যারেক্টারগুলো প্রথমে আসে।
kt_satt_skill_example_id=451
সি strstr() ফাংশন
Strstr() ফাংশন প্রদত্ত স্ট্রিং এর মধ্যে মিলিত স্ট্রিং এর প্রথম সংঘটনের পয়েন্টার রিটার্ন করে। এটি substring এর মিলিত প্রথম অক্ষর থেকে সর্বশেষ অক্ষর পর্যন্ত রিটার্ন করে।
সিনট্যাক্স:
char *strstr(const char *string, const char *match)
সিনট্যাক্সের ব্যাখ্যাঃ
string: ইহা দ্বারা স্ট্রিং এর সম্পূর্ণ অংশকে বুঝায়। যেখান থেকে substring সার্স করা হবে।
match: ইহা হচ্ছে submatch যা সম্পূর্ণ স্ট্রিং থেকে সার্স করা হবে।
kt_satt_skill_example_id=453
Read more